﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIM.Geo.DA;
using SIM.Geo.BE;

namespace SIM.Geo.BL
{
    public class BLUsuario
    {

        #region Metodos
        /// <summary>
        /// Método que devuelve la lista de Usuario
        /// </summary>
        /// <returns></returns>
        public List<Usuario> ListarUsuario()
        {
            return Accesor.ListarUsuario();
        }
        /// <summary>
        /// Método para insertar una Usuario
        /// </summary>
        /// <param name="Usuario"></param>
        /// <returns></returns>
        public string InsertarUsuario(Usuario usuario)
        {
            return Accesor.InsertarUsuario(usuario);
        }
        /// <summary>
        /// Método para modificar un Usuario
        /// </summary>
        /// <param name="Usuario"></param>
        public void ModificarUsuario(Usuario usuario)
        {
            Accesor.ModificarUsuario(usuario);
        }
        /// <summary>
        /// Método para eliminar Usuario
        /// </summary>
        /// <param name="Usuario"></param>
        public void EliminarUsuario(string codigoUsuario)
        {
            var usuario = Accesor.ObtenerUsuario(codigoUsuario);
            Accesor.EliminarUsuario(usuario);
        }
        /// <summary>
        /// Método que busca por nombre Usuario
        /// </summary>
        /// <param name="nombre"></param>
        /// <returns></returns>
        public List<Usuario> BuscarUsuario(string nombre)
        {
            return Accesor.BuscarUsuario(nombre);
        }
        /// <summary>
        /// Método que devuelve Usuario por codigo
        /// </summary>
        /// <param name="codigoUsuario"></param>
        /// <returns></returns>
        public Usuario ObtenerUsuario(string codigoUsuario)
        {
            return Accesor.ObtenerUsuario(codigoUsuario);
        }
        /// <summary>
        /// Valida el login de usuario
        /// </summary>
        /// <param name="login"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public UsuarioResponse ValidarAcceso(string login, string password)
        {
            var usuario = Accesor.ObtenerUsuario(login);
            UsuarioResponse usuarioResponse = null;
            if (usuario != null)
            {
                if (usuario.Password.ToUpper().CompareTo(password.ToUpper()) == 0)
                {
                    usuarioResponse = new UsuarioResponse();
                    usuarioResponse.CodigoUsuario = usuario.CodigoUsuario;
                    usuarioResponse.NombreUsuario = usuario.NombreUsuario;
                    var perfiles = Accesor.ListarPerfilesPorUsuario(usuario.CodigoUsuario);
                    usuarioResponse.Perfiles = perfiles;
                    usuarioResponse.CodigoTrabajador = usuario.CodigoTrabajador;
                    return usuarioResponse;
                }
                usuario.Password = null;
            }
            return null;
        }

        /// <summary>
        /// Método que devuelve Usuario por codigo
        /// </summary>
        /// <param name="codigoUsuario"></param>
        /// <returns></returns>
        public UsuarioResponse ObtenerUsuarioPerfil(string codigoUsuario, int codigoPerfil)
        {
            UsuarioResponse usuarioResponse = Accesor.ObtenerUsuarioPerfil(codigoUsuario, codigoPerfil);
            if (usuarioResponse != null)
            {
                var perfiles = Accesor.ListarPerfilesPorUsuario(usuarioResponse.CodigoUsuario);
                usuarioResponse.Perfiles = perfiles;

                #region completa los datos de perfil usuario
                //Si tiene codigo de trabajado asociado, cargo el codigo de geologo y codigo de tomador de muestra
                if (!string.IsNullOrEmpty(usuarioResponse.CodigoTrabajador))
                {
                    var geologo = new DAGeologo().ObtenerGeologoPorCodigoTrabajador(usuarioResponse.CodigoTrabajador);
                    if (geologo != null)
                    {
                        usuarioResponse.CodigoGeologo = geologo.CodigoGeologo;
                        usuarioResponse.NombreGeologo = geologo.Nombres + " " + geologo.ApellidoPaterno + " " + geologo.ApellidoMaterno;
                    }

                    var tomadorMuestra = new DATomadorMuestra().ObtenerTomadorMuestraPorCodigoTrabajador(usuarioResponse.CodigoTrabajador);
                    if (tomadorMuestra != null)
                    {
                        usuarioResponse.CodigoTomadorMuestra = tomadorMuestra.CodigoTomadorMuestra;
                        usuarioResponse.NombreTomadorMuestra = tomadorMuestra.Nombres + " " + tomadorMuestra.ApellidoPaterno + " " + tomadorMuestra.ApellidoMaterno;
                    }
                }
                #endregion
            }
            return usuarioResponse;
        }
        #endregion

        #region Accesor
        private static DAUsuario Accesor
        {
            [System.Diagnostics.DebuggerStepThrough]
            get { return new DAUsuario(); }
        }
        #endregion
    }
}
